package co.edu.udea.herbario.dao;

import java.util.List;
import co.edu.udea.herbario.dto.Ejemplar;
import co.edu.udea.herbario.excepcion.Excepcion;

/**
 * Clase de tipo interface que contiene la declaracion de los metodos utilizados para gestionar
 * los datos de la tabla Ejemplar entre la persistencia y la logica de la aplicacion
 * 
 * @author Lorena Orozco, Alejandro Areiza, Marcela Colorado
 *
 */

public interface EjemplarDao 
{
	/**
	 * Este metodo es el encargado de entregar en una lista todos los ejemplares registrados 
	 * en el sistema de acuerdo al nombre de la familia pasado como parametro para la busqueda basica
	 * 
	 * @param familia corresponde al nombre de la familia a la que pertenece el ejemplar
	 * 
	 * @return retorna una lista de objetos tipo Ejemplar con todos los ejemplares relacionados con la familia
	 * indicada
	 * 
	 * @throws Excepcion
	 */
	public List<Ejemplar> obtenerEjemplaresPorFamilia(String familia) throws Excepcion;
	
	/**
	 * Este metodo es el encargado de entregar en una lista todos los ejemplares registrados 
	 * en el sistema de acuerdo al nombre del genero pasado como parametro para la busqueda basica
	 * 
	 * @param genero corresponde al nombre del genero al que pertenece el ejemplar
	 * 
	 * @return retorna una lista de objetos tipo Ejemplar con todos los ejemplares relacionados con el genero
	 * indicado
	 * 
	 * @throws Excepcion
	 */
	public List<Ejemplar> obtenerEjemplaresPorGenero(String genero) throws Excepcion;
	
	/**
	 * Este metodo es el encargado de entregar en una lista todos los ejemplares registrados 
	 * en el sistema de acuerdo al nombre cientifico pasado como parametro para la busqueda basica
	 * 
	 * @param nomCien corresponde al nombre cientifico del ejemplar
	 * 
	 * @return retorna una lista de objetos tipo Ejemplar con todos los ejemplares relacionados con el nombre
	 * cientifico indicado
	 * 
	 * @throws Excepcion
	 */
	public List<Ejemplar> obtenerEjemplaresPorNombreCientifico(String nomCien) throws Excepcion;
	
	/**
	 * Este metodo es el encargado de entregar en una lista todos los ejemplares registrados 
	 * en el sistema de acuerdo a los datos pasados como parametro para la busqueda avanzada
	 * 
	 * @param familia corresponde al nombre de la familia a la que pertenece el ejemplar 
	 * @param genero corresponde al nombre del genero al que pertenece el ejemplar 
	 * @param nombreCientifico corresponde al nombre cientifico asignado al ejemplar 
	 * @param colectorPrincipal corresponde al nombre la persona que recolecto el ejemplar 
	 * @param numeroColeccion corresponde al consecutivo asignado por el colector al ejemplar 
	 * @param pais corresponde al pais en el que se encontro el ejemplar 
	 * @param departamento corresponde al departamento en el que se encontro el ejemplar
	 * @param municipio corresponde al municipio en el que se encontro el ejemplar
	 * 
	 * @return retorna una lista de objetos tipo Ejemplar que coincidan con los criterios de 
	 * busqueda especificados
	 * 
	 * @throws Excepcion
	 */
	public List<Ejemplar> obtenerEjemplares(String familia, String genero, String nombreCientifico, 
			String colectorPrincipal, int numeroColeccion, String pais, String departamento, 
			String municipio) throws Excepcion;
	
	/**
	 * Metodo que obtiene desde la tabla Ejemplar el elemento referenciado con el codigo indicado
	 * como parametro
	 * 
	 * @param cod es el codigo que identifica al ejemplar dentro del sistema
	 * 
	 * @return retorna un objeto de tipo Ejemplar
	 * 
	 * @throws Excepcion
	 */
	public Ejemplar obtener(int cod) throws Excepcion;
	
	/**
	 * Permite llevar a cabo el proceso de modificacion de los datos asociados a un ejemplar
	 * 
	 * @param ejem hace referencia a un objeto de tipo Ejemplar
	 * 
	 * @return retorna un entero: res = 1 si se realizo correctamente la actualizacion, de
	 * lo contrario res = -1
	 * 
	 * @throws Excepcion
	 */
	public int actualizar(Ejemplar ejem) throws Excepcion;
	
	/**
	 * Metodo para crear un elemento en la tabla Ejemplar
	 * 
	 * @param ejem es un objeto de tipo Ejemplar
	 * 
	 * @return retorna un entero: res = 1 si se realizo correctamente la creacion, de lo contrario 
	 * res = -1
	 * 
	 * @throws Excepcion
	 */
	public int crear(Ejemplar ejem) throws Excepcion;
	
	/**
	 * Modifica el estado (activo o inactivo) del elemento de la tabla Ejemplar que coincida con el 
	 * identificador pasado como parametro
	 * 
	 * @param cod es el identificador del ejemplar dentro del sistema
	 * 
	 * @return retorna un entero: res = 1 si se realizo correctamente la eliminacion, de
	 * lo contrario res = -1
	 * 
	 * @throws Excepcion
	 */
	public int eliminar(Ejemplar ejem) throws Excepcion;
}
